<?php
/**
 * ApcUpLoad 配置帮助
 * @name IApcUpLoadHelper 
 * @version $Id: IApcUpLoadHelper.php 312 2008-05-12 15:01:21 peter $
 * @package net.frog.auc
 * @author peter <openjsp@gmail.com>
 * @since 0.2 rc6
 */
class IApcUpLoadHelper {
		/**
		 * 临时文件夹 默认 /tmp
		 *
		 * @var String
		 */
		private $tempUpLoadPath = "/tmp";
		/**
		 * 目标文件夹
		 *
		 * @var String
		 */
		private $upLoadPath;
		
		/**
		 * 上传文件类型
		 *
		 * @var String
		 */
		private $restrictionsFileType = "jpeg|gif|mpeg|plain";
		
		/**
		 * 上传文件大小
		 * 
		 * @var integer  默认 10M 
		 */
		private $maxFileSize = 104857600;
		//MAX_FILE_SIZE
		
		/**
		 * 文件域
		 *
		 * @var String
		 */
		private $fileObj;
		
		/**
		 * 设定POST文件大小
		 *
		 * @var String
		 */
		private $postMaxSize = "50M";
		
		/**
		 * 设定上传文件大小
		 *
		 * @var String
		 */
		private $uploadMaxFilesize = "50M";
		
		/**
		 * 申请内存空间大小
		 *
		 * @var String
		 */
		private $memoryLimit = "128M";
		
		/**
		 * 构造
		 *
		 * @param String $fileObjName
		 */
		public function __construct($fileObjName){
				if((bool)ini_get("apc.enabled") == false){
						return false;
				}
				$this->fileObj = $fileObjName;
		}
		/**
		 * 内存申请
		 *
		 * @param Integer $limit
		 */
		public function setML($limit){
				ini_get('memory_limit',$limit);
		}
		/**
		 * 获取申请内存大小
		 *
		 * @return Integer
		 */
		public function getML(){
				return $this->memoryLimit;
		}
		
		/**
		 * 设定上传文件大小
		 *
		 * @param Integer $filesize
		 */
		public function setUMF($filesize){
				ini_get('upload_max_filesize',$filesize);
		}
		/**
		 * 获取上传文件大小
		 *
		 * @return Integer
		 */
		public function getUMF(){
				return $this->uploadMaxFilesize;
		}
		
		/**
		 * 设定POST文件大小
		 *
		 * @param Integer $size
		 */
		public function setPMS($size){
				ini_get('post_max_size',$size);
		}
		/**
		 * 获取POST文件大小
		 *
		 * @return Integer
		 */
		public function getPMS(){
			  return $this->postMaxSize;
		}
		
		/**
		 * 获取文件大小
		 *
		 * @return Integer
		 */
		public function getSize(){
				return $_FILES[$this->fileObj]["size"];
		}
		/**
		 *    设置最大文件上传值
		 *  $size M  例 1 ＝ 1M
		 * @param Integer $size
		 */
		public function setMaxFileSize($size){
			if(!is_integer($size) || (($size * 1) != $size)){
					return false;
			}
			$this->maxFileSize = (1024 * 1024) * $size;
		}
		/**
		 * 获取最大上传值
		 *
		 * @return Integer
		 */
		public function getMaxFileSize(){
			return $this->maxFileSize;
		}
		
		/**
		 * 设置文件上传类型
		 *
		 * @param String $str
		 */
		public function setRestrictionsFileType($str){
				$this->restrictionsFileType = $str;
		}
		/**
		 * 获取设定的文件上传类型
		 *
		 * @return String
		 */
		public function getRestrictionsFileType(){
			return $this->restrictionsFileType;
		}
		/**
		 * 获取上传文件的临时路径
		 *
		 * @return String
		 */
		public function getTempUpLoadPath(){
				return $this->tempUpLoadPath;
		} 
		/**
		 * 设置文件上传的临时路径
		 *
		 * @param String $path
		 */
		public function setTempUpLoadPath($path){
				$this->tempUpLoadPath = $path;
		}
		/**
		 * 获取上传文件的路径
		 *
		 * @return String
		 */
		public function getP(){
				return $this->upLoadPath;
		}
		/**
		 * 设置上传文件的路径
		 *
		 * @param String $path
		 */
		public function setP($path){
				$this->upLoadPath = $path;
		}

		/**
		 * Enter 上传后的文件名
		 *
		 * @param String $newName
		 * @return String
		 */
		public function getNewFileName($newName = null){
				$newFileName = $newName?$newName:time();
				return $newFileName.".".$this->getExtension();
		}
		/**
		 * 获取源文件名
		 *
		 * @return String
		 */
		public function getOldFileName(){
				return $_FILES[$this->fileObj]["name"];
		}
		/**
		 * 获取临时文件名
		 *
		 * @return String
		 */
		public function getTmpName(){
				return $_FILES[$this->fileObj]["tmp_name"];
		}
		
		/**
		 * 获取后缀名
		 *
		 * @return String
		 */
		public function getExtension(){
				$path_parts = pathinfo($this->getOldFileName());
				return $path_parts["extension"];
		}
	
         /**
          * 
          *   获取上传信息
          * 
     *	UPLOAD_ERR_OK
		  *    值：0; 没有错误发生，文件上传成功。
		 *  UPLOAD_ERR_INI_SIZE
		  *    值：1; 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
		 *  UPLOAD_ERR_FORM_SIZE
		  *    值：2; 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
		 *  UPLOAD_ERR_PARTIAL
		  *    值：3; 文件只有部分被上传。
		 *  UPLOAD_ERR_NO_FILE
		  *    值：4; 没有文件被上传。
		  *    值：5; 上传文件大小为0. 
         */
		public function getError(){
			return $_FILES[$this->fileObj]["error"];
		}
		/**
		 * 获取错误提示信息
		 *
		 * @return String
		 */
		public function getErrorInfo(){
				$error = $this->getError();
				$info = "";
				switch($error){
						case 0:
							$info = "文件上传成功";
							break;
						case 1:
							$info = "文件上传超出  php.ini 中 upload_max_filesize 选项限制的值 ";
							break;
						case 2:
							$info = "上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值";
							break;
						case 3:
							$info = "文件只有部分被上传 可能文件错误";
							break;
						case 4:
							$info = "没有文件被上传";
							break;
						case 5:
							$info = "上传文件大小为0.";
							break;
						default:
							$info = "未知错误 请检查你的程序";
							break;
				}
				return $info;
		}
		/**
		 * 获取文件的Mime类型
		 *
		 * @return Array
		 */
		public function mimeContentType(){
				$mimeA = explode("/",mime_content_type($this->getTmpName()));
				$mime = array(
							"mime"=>$mimeA[0],
							"type"=>strtolower($mimeA[1])
				);
				return $mime;
		}
}
?>
